package org.jsola.hr.service;

import javax.validation.constraints.NotNull;
import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IEmpTrainDAO;
import org.jsola.hr.dto.EmpTrainAddDTO;
import org.jsola.hr.dto.EmpTrainDTO;
import org.jsola.hr.dto.EmpTrainUpdateDTO;
import org.jsola.hr.entity.EmpTrainDO;
import org.jsola.hr.query.EmpTrainQuery;
import org.jsola.hr.vo.EmpTrainListVO;
import org.jsola.hr.vo.EmpTrainVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * @author zhr
 */
public interface IEmpTrainService extends IService<IEmpTrainDAO, EmpTrainDO> {

    /**
     * 新增员工培训记录
     * @param empTrainAddDTO 新增员工培训记录DTO
     * @param tokenUser 当前用户
     * @return 员工培训记录详情信息
     */
    EmpTrainVO save(EmpTrainAddDTO empTrainAddDTO, TokenUser tokenUser);

    /**
     * 修改员工培训记录
     * @param empTrainUpdateDTO 修改员工培训记录DTO
     * @param tokenUser 当前用户
     * @return 更新数量
     */
    int update(EmpTrainUpdateDTO empTrainUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除员工培训记录，物理删除，更新is_valid字段，从回收站删除
     * @param tokenUser 当前用户
     * @param empTrainIds 员工培训记录id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String...empTrainIds);

    /**
     * 根据员工培训记录id查找
     * @param empTrainId 员工培训记录id
     * @param siteId 所属站点id
     * @return 员工培训记录详情信息
     */
    EmpTrainVO selectById(String empTrainId, String siteId);

    /**
     * 查询员工培训记录
     * @param empTrainQuery 查询条件
     * @param siteId 所属站点id
     * @return 员工培训记录列表信息
     */
    List<EmpTrainListVO> select(EmpTrainQuery empTrainQuery, String siteId);

    /**
    * 查询员工培训记录记录数
    * @param empTrainQuery 查询条件
    * @param siteId 所属站点id
    * @return 员工培训记录记录数
    */
    int selectCount(EmpTrainQuery empTrainQuery, String siteId);

    /**
     * 分页查询员工培训记录
     * @param empTrainQuery 查询条件
     * @param siteId 所属站点id
     * @return 员工培训记录列表信息
     */
    Page<EmpTrainListVO> selectPage(EmpTrainQuery empTrainQuery, String siteId);


    /**
     * 根据员工培训记录id查找
     * @param empTrainId 员工培训记录id
     * @param siteId 所属站点id
     * @return 员工培训记录
     */
    EmpTrainDO selectDOById(String empTrainId, String siteId);

    /**
     * 查询员工培训记录
     * @param empTrainQuery 查询条件
     * @param siteId 所属站点id
     * @return 员工培训记录列表
     */
    List<EmpTrainDO> selectDO(EmpTrainQuery empTrainQuery, String siteId);

    /**
     * 删除员工培训记录
     * @param tokenUser 当前用户
     * @param empTrainId 员工培训记录id
     * @return 删除数量
     */
    Integer deleteEmpTrain(TokenUser tokenUser, String empTrainId);

    /**
     * 根据公司id删除部门
     *
     * @param companyId 公司id
     * @param tokenUser 当前用户
     */
    void deleteByCompanyId(@NotNull String companyId, TokenUser tokenUser);

    /**
     * 培训记录
     *
     * @param empTrainList 培训记录
     * @param companyId    公司id
     * @param empId        人员id
     * @param tokenUser    当前用户
     */
    void publishEmpTrainList(List<EmpTrainDTO> empTrainList, String companyId, String empId, TokenUser tokenUser);

    /**
     * 查找某员工的所有培训记录
     *
     * @param empId  员工id
     * @param siteId 站点
     * @return 员工的所有培训记录
     */
    List<EmpTrainDO> listByEmpId(String empId, String siteId);
}


